package cn.zyl.common.redis.service;

import java.util.List;
import java.util.Map;

/**
 * RedisConnectApi接口说明: 统一的redis客户端暴露的接口
 *
 * @author wsz
 * @version v1.0
 * @date 2020-08-05
 */
public interface JedisConnectApi {
    /**
     * ping连接redis服务器
     * @param message 消息
     * @return 消息
     */
    String ping(String message);
    /**
     * 获取redis，有关服务器的信息和统计数据
     * @param section 消息
     * @return 消息
     */
    String info(String section);
    /**
     * 将字符串值设置为键的值
     * @param key 键
     * @param value 值
     * @return 状态码回复
     */
    String set(String key, String value);
    /**
     * 获取指定键的值。 如果该键不返回则为null。 如果存储在关键值不返回一个错误，因为GET只能处理字符串值的字符串。
     * @param key 键
     * @return 值
     */
    Map<String, Object> get(String key);
    /**
     * 使用"cluster slots"指令获取Cluster节点和槽的映射关系
     * @return 映射关系
     */
    List<Object> slots();

    /**
     * 随机获取key，并返回相关信息
     * @return key相关信息
     */
    Map<String, Object> randomKey();
    /**
     * scan命令扫描redis的key空间（RedisCluster模式下并不能应用scan命令）
     * @param cursor 数字，第一次为 0 ，扫描redis的游标，SCAN 命令每次被调用之后， 都会向用户返回一个新的游标
     * @param match 正则匹配key,全部为 *，建议前缀正则如：key*
     * @param count 每次扫描的个数
     * @return 扫描结果，含新的游标，如果返回游标为0说明扫描结束
     */
    Map<String, Object> scan(String cursor,String match,Integer count);
}
